package cn.edu.ctbu.sbadmin.teacher.webapi;

import cn.edu.ctbu.sbadmin.common.controller.BaseRestController;
import cn.edu.ctbu.sbadmin.common.utils.MQuery;
import cn.edu.ctbu.sbadmin.common.utils.MQueryHelper;
import cn.edu.ctbu.sbadmin.common.utils.PageUtils;
import cn.edu.ctbu.sbadmin.common.utils.R;
import cn.edu.ctbu.sbadmin.lablog.domain.DimClassDO;
import cn.edu.ctbu.sbadmin.lablog.service.DimClassService;
import org.apache.shiro.authz.annotation.RequiresPermissions;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

import java.util.Date;
import java.util.List;

@RestController
@RequestMapping("/webapi/teacher/dimclass")  //先访问这个
public class TeacherClassRestController extends BaseRestController {
    @Autowired
    DimClassService dimClassService;
    //    @RequiresPermissions("system:role:list")
    @RequestMapping("/getByPage")   // 再访问这个   会拼接成/webapi/lablog/dimclass/getByPage
    //lablog（模块）:dimclass（控制器）:list（方法）
    @RequiresPermissions("teacher:dimclass:list")  //读权限（约定为读权限）必须含有lablog:dimter:list的权限才能执行方法PageUtils list
    /**
     * where查询的条件
     * pageSize每页多少数据
     * pageIndex当前页
     * sort排序
     */
    public PageUtils list(@RequestParam("where") String where,
                          @RequestParam("pageSize") Integer pageSize,
                          @RequestParam("pageIndex") Integer pageIndex,
                          @RequestParam("sort") String sort,
                          @RequestParam("direct") String direct
    ) throws Exception {
        //首先，把where条件的参数转为QueryAndItems
//        其中,where条件需要我们自己组装.示例:
//        name=张^:like&time=2^:lg&dmtCreate=2017-01-01^^2018-01-01
//        这个表示:
//        (name like '%张%' )and ( time<2 ) and (dmtCreate between '2017-01-01' and '2018-01-01)
        // 键=值^:操作   labName=3%5E:like
        // 有true才是能条件查询，才能将条件的名称变成反驼峰，比如termName变成term_name
        // where userid=1 and()  就可以过滤掉别人的
        Long userId = super.getUserId();  // 使用父类的方法所以可以是super 或者this
        where = "teacherId=" + userId + "&" + where;
        MQuery mQuery= MQueryHelper.GenQuery(where,pageSize,pageIndex,sort,direct,true);//封装成对象
        //
        //这边按ctrl点击代码，便可以查看代码
        // 通过这个去查询
        List<DimClassDO> dimclassDOPageInfo = dimClassService.listView(mQuery);  //怎么做查询的，，在这里面
        // 用来计数
        int total = dimClassService.countView(mQuery);
        // PageUtils
        PageUtils pageUtils = new PageUtils(dimclassDOPageInfo,total);

        return pageUtils;
    }

    /**
     * 根据id读取数据（只有一条记录，在操作点击操作的时候用到，之前这块没有显示额外附加表的信息（没有老师名和学期学年名）
     * 修改后就有老师名和学期学年的名
     * @param id
     * @return
     */
    @RequestMapping("/get")   //取数据
    @RequiresPermissions("teacher:dimclass:list")  //有权限才能访问
    public R get(Long id) throws Exception{
        // 修改的代码，将 DimClassDO dimClassDO = dimClassService.get(id);删除改为下面的
        // 为什么加了这个就有
        Long userId = super.getUserId();  // 使用父类的方法所以可以是super 或者this
        String where = "teacherId=" + userId + "&dim_class.id=" + id;   // "&id=" 老师是&dim_class.id
        MQuery mQuery= MQueryHelper.GenQuery(where,10,0,"","",true);

        List<DimClassDO> dimClassDOList=dimClassService.listView(mQuery);
        if (dimClassDOList.size() > 0) {
            // 返回第0个元素
            return R.ok("data", dimClassDOList.get(0));
        }
        return R.error(-1, "出错了，找不到此数据!");
    }

    /**
     * 保存数据
     * @param dimClassDO
     * @return
     */
    @PostMapping("/save")
    @RequiresPermissions("teacher:dimclass:add")
    public R save(DimClassDO dimClassDO) {
        dimClassDO.setTeacherId(super.getUserId());  // 保存用户id的信息
        Date now = new Date();  // new 一个date当前的时间
        dimClassDO.setCreateTime(now);
        //save有返回值，返回大于0则是save成功
        if (dimClassService.save(dimClassDO) >0){
            return R.ok("data", dimClassDO);
        }
        return R.error();
    }

    /**
     * 更新方法
     * @param dimClassDO
     * @return
     */
    @PostMapping("/update")
    @RequiresPermissions("teacher:dimclass:edit") //可编辑
    public R updata(DimClassDO dimClassDO) {
        Long userId = super.getUserId();
        DimClassDO olddimClassDO = dimClassService.get(dimClassDO.getId());
        if(olddimClassDO.getTeacherId()==userId)
        {
            // 做更新

            if (dimClassService.update(dimClassDO) > 0) {
                return R.ok("data", dimClassDO);
            }
        }

        return R.error(-3,"你无权更新不是你的数据！");
    }

    /**
     * 批量删除
     * @param ids
     * @return
     */
    @RequestMapping("/batchDelete")
    @RequiresPermissions("teacher:dimclass:remove")
    public R batchDelete(@RequestParam("ids[]") Long[] ids)
    {
        //先读取再删除
        List<DimClassDO> dimClassDOS=dimClassService.findByIds(ids);
        Long userId = super.getUserId();
        if(dimClassDOS.size()>0)
        {
            //依次循环删除
            for(DimClassDO dimclassDO:dimClassDOS)
            {
                if(dimclassDO.getTeacherId()==userId)  // 判断是否是我的
                {
                    dimClassService.delete(dimclassDO.getId());
                }

            }
        }
        return R.ok();
    }
    @RequestMapping("/getAll")   //取数据
    @RequiresPermissions("teacher:dimclass:list")  //有权限才能访问
    public R getAll() {
        List<DimClassDO> dimClassDOS = dimClassService.findAll();
        return R.ok("data", dimClassDOS);
    }
}
